const bcrypt = require('bcrypt')

// 引用用户集合方法
const { User, validateUser } = require('../../models/user')

module.exports = async (req, res, next) => {

    try {
        await validateUser(req.body);
    } catch (error) {
        console.log(error.message);
        // 验证失败
        // 重定向至user-edit页面，携带参数
        // return res.redirect('/admin/user-edit?message=' + error.message)

        return next(JSON.stringify(
            {path: '/admin/user-edit', message: error.message}
        ))
    }

    // 验证通过
    // 查询此email是否已经注册过了
    const user = await User.findOne({email: req.body.email});
    // 判断user
    if(user) {
        // 此邮箱已被注册
        // return res.redirect('/admin/user-edit?message=邮箱地址已被占用')
        return next(JSON.stringify(
            {path: '/admin/user-edit', message: '邮箱地址已被占用'}
        ))
    }

    // 加密密码
    const salt = await bcrypt.genSalt(10);
    const password = await bcrypt.hash(req.body.password, salt);
    req.body.password = password;

    // 将用户信息添加到数据库
    await User.create(req.body);

    // 将页面重定向到用户列表页面
    res.redirect('/admin/user');
}